/**
 * 系统常量定义
 */

/**
 * 社交平台类型枚举
 */
export const SocialTypeEnum = {
  // Gitee
  GITEE: {
    type: 10,
    name: 'GITEE',
    title: 'Gitee'
  },
  // 钉钉
  DINGTALK: {
    type: 20,
    name: 'DINGTALK',
    title: '钉钉'
  },
  // 企业微信
  WECHAT_ENTERPRISE: {
    type: 30,
    name: 'WECHAT_ENTERPRISE',
    title: '企业微信'
  },
  // 微信公众平台 - 移动端H5
  WECHAT_MP: {
    type: 31,
    name: 'WECHAT_MP',
    title: '微信公众号'
  },
  // 微信开放平台 - 网站应用PC端扫码授权登录
  WECHAT_OPEN: {
    type: 32,
    name: 'WECHAT_OPEN',
    title: '微信开放平台'
  },
  // 微信小程序
  WECHAT_MINI_APP: {
    type: 34,
    name: 'WECHAT_MINI_APP',
    title: '微信小程序'
  }
};

/**
 * 根据类型值获取社交平台枚举
 * @param {Number} type - 类型值
 * @returns {Object|null} 对应的枚举对象，未找到返回null
 */
export function getSocialTypeByValue(type) {
  for (const key in SocialTypeEnum) {
    if (SocialTypeEnum[key].type === type) {
      return SocialTypeEnum[key];
    }
  }
  return null;
}

/**
 * 获取所有社交平台类型值的数组
 * @returns {Number[]} 类型值数组
 */
export function getSocialTypeValues() {
  return Object.values(SocialTypeEnum).map(item => item.type);
}

// ========== 王者荣耀相关常量 ==========

/**
 * 王者荣耀段位数据
 * 完整的13个段位等级
 */
export const GAME_RANKS = [
  { id: 1, name: '青铜', shortName: '青铜' },
  { id: 2, name: '白银', shortName: '白银' },
  { id: 3, name: '黄金', shortName: '黄金' },
  { id: 4, name: '尊贵铂金', shortName: '铂金' },
  { id: 5, name: '永恒钻石', shortName: '钻石' },
  { id: 6, name: '至尊星耀', shortName: '星耀' },
  { id: 7, name: '最强王者', shortName: '王者' },
  { id: 8, name: '非凡王者', shortName: '非凡' },
  { id: 9, name: '无双王者', shortName: '无双' },
  { id: 10, name: '绝世王者', shortName: '绝世' },
  { id: 11, name: '至圣王者', shortName: '至圣' },
  { id: 12, name: '荣耀王者', shortName: '荣耀' },
  { id: 13, name: '传奇王者', shortName: '传奇' }
];

/**
 * 段位映射对象（用于快速查找）
 */
export const RANK_MAP = {};
GAME_RANKS.forEach(rank => {
  RANK_MAP[rank.id] = rank.name;
});

/**
 * 王者荣耀位置枚举
 * 与后端 GameKingPositionEnum 保持一致
 */
export const GAME_POSITIONS = [
  { id: 1, name: '上路', shortName: '上单' },
  { id: 2, name: '中路', shortName: '中单' },
  { id: 3, name: '下路', shortName: '下路' },
  { id: 4, name: '辅助', shortName: '辅助' },
  { id: 5, name: '打野', shortName: '打野' }
];

/**
 * 队伍类型枚举
 */
export const TEAM_TYPES = [
  { id: 1, name: '娱乐局', key: 'fun' },
  { id: 2, name: '排位赛', key: 'rank' },
  { id: 3, name: '找对象', key: 'social' }
];

/**
 * 队伍状态枚举
 */
export const TEAM_STATUS = [
  { id: 0, name: '组队中', key: 'recruiting' },
  { id: 1, name: '已解散', key: 'disbanded' },
  { id: 2, name: '已完成', key: 'completed' }
];

/**
 * 账号区域类型枚举
 */
export const AREA_TYPES = [
  { id: 1, name: '微信区', key: 'wechat' },
  { id: 2, name: 'QQ区', key: 'qq' }
];

/**
 * 审核状态枚举
 */
export const AUDIT_STATUS = [
  { id: 0, name: '待审核', key: 'pending' },
  { id: 1, name: '通过', key: 'approved' },
  { id: 2, name: '拒绝', key: 'rejected' }
];

// ========== 游戏相关工具函数 ==========

/**
 * 根据段位ID获取段位名称
 * @param {Number} rankId - 段位ID
 * @returns {String} 段位名称
 */
export function getRankNameById(rankId) {
  return RANK_MAP[rankId] || '未知段位';
}

/**
 * 根据段位ID获取段位对象
 * @param {Number} rankId - 段位ID
 * @returns {Object|null} 段位对象
 */
export function getRankById(rankId) {
  return GAME_RANKS.find(rank => rank.id === rankId) || null;
}

/**
 * 获取所有段位列表
 * @returns {Array} 段位列表
 */
export function getAllRanks() {
  return GAME_RANKS;
}

/**
 * 检查段位ID是否有效
 * @param {Number} rankId - 段位ID
 * @returns {Boolean} 是否有效
 */
export function isValidRankId(rankId) {
  return RANK_MAP.hasOwnProperty(rankId);
}

/**
 * 根据位置ID获取位置名称
 * @param {Number} positionId - 位置ID
 * @returns {String} 位置名称
 */
export function getPositionNameById(positionId) {
  const position = GAME_POSITIONS.find(p => p.id === positionId);
  return position ? position.name : '未知位置';
}

/**
 * 根据队伍类型ID获取队伍类型名称
 * @param {Number} teamTypeId - 队伍类型ID
 * @returns {String} 队伍类型名称
 */
export function getTeamTypeNameById(teamTypeId) {
  const teamType = TEAM_TYPES.find(t => t.id === teamTypeId);
  return teamType ? teamType.name : '未知类型';
}

/**
 * 根据队伍状态ID获取队伍状态名称
 * @param {Number} statusId - 状态ID
 * @returns {String} 状态名称
 */
export function getTeamStatusNameById(statusId) {
  const status = TEAM_STATUS.find(s => s.id === statusId);
  return status ? status.name : '未知状态';
}

/**
 * 根据区域类型ID获取区域名称
 * @param {Number} areaTypeId - 区域类型ID
 * @returns {String} 区域名称
 */
export function getAreaTypeNameById(areaTypeId) {
  const areaType = AREA_TYPES.find(a => a.id === areaTypeId);
  return areaType ? areaType.name : '未知区域';
}

/**
 * 根据审核状态ID获取审核状态名称
 * @param {Number} auditStatusId - 审核状态ID
 * @returns {String} 审核状态名称
 */
export function getAuditStatusNameById(auditStatusId) {
  const auditStatus = AUDIT_STATUS.find(a => a.id === auditStatusId);
  return auditStatus ? auditStatus.name : '未知状态';
}

// ========== 分享文案相关常量 ==========

/**
 * 邀请弹窗文案库
 * 用于邀请好友弹窗中显示的详细文案
 */
export const INVITE_MESSAGES = [
  // 解决匹配痛点类
  '再也不用忍受坑队友了！快来加入我们的五排战队！',
  '告别匹配遇到小学生，我们只要有实力的队友！',
  '厌倦了单排被坑？加入我们，体验真正的团队配合！',
  '不想再被匹配系统折磨？来我们队伍，稳定上分！',
  '单排太痛苦？五排才是王者荣耀的正确打开方式！',

  // 上分诱惑类
  '这个队伍已经连胜8局了，快上车！错过再等一年！',
  '队友都是王者段位，带你轻松上星耀！',
  '我们队伍胜率85%，还差一个人就能开始连胜之旅！',
  '跟着大神混，三天上一个大段位不是梦！',
  '这个组合太强了，对面根本顶不住我们的攻势！',

  // 找对象暗示类
  '队伍里有小姐姐，声音超甜，快来一起开黑！',
  '听说开黑容易产生感情，要不要来试试？',
  '我们队伍男女搭配，干活不累，说不定还能脱单！',
  '队友颜值都很高，开黑顺便看看有没有眼缘！',
  '边打游戏边聊天，比相亲软件靠谱多了！',

  // FOMO恐惧类
  '最后一个位置了！手慢无！',
  '这种神仙队友组合，一年难遇一次！',
  '错过这个队伍，你会后悔一整个赛季！',
  '别人都在五排上分，你还在单排受苦？',
  '机会就在眼前，不抓住就被别人抢走了！',

  // 炫耀成就类
  '刚刚五杀了，这个队伍配合太默契！',
  '我们已经连胜到手软，就差你一个人了！',
  '队友操作太秀了，跟着他们躺赢就行！',
  '这个阵容无敌，对面看到我们都想投降！',
  '加入我们，让你体验什么叫碾压局！',

  // 情感共鸣类
  '一个人打游戏太孤单，一起开黑才有意思！',
  '游戏本来就是用来交朋友的，快来认识新伙伴！',
  '人生得一知己足矣，游戏得一好队友更难得！',
  '开黑不只是游戏，更是友谊的开始！',
  '志同道合的人总是相遇，你就是我们要找的那个人！',

  // 技术流类
  '我们有专业的BP策略，保证让你学到东西！',
  '队伍里有职业选手退役，技术指导包教包会！',
  '想学高端局的打法？加入我们就对了！',
  '我们不只是开黑，还会复盘教学！',
  '跟着我们，让你的游戏理解提升一个档次！',

  // 幽默搞笑类
  '我们队伍唯一的缺点就是太强了，需要你来平衡一下！',
  '加入我们，保证让你笑到肚子疼！',
  '我们的口号：要么一起赢，要么一起快乐地输！',
  '队伍氛围超好，就算输了也能笑出声！',
  '人生苦短，何不找几个沙雕队友一起快乐？',

  // 时间紧迫类
  '现在就开，马上就能排到人！',
  '黄金时间段，遇到的对手都比较菜！',
  '趁现在人少，快速上分的好机会！',
  '深夜时光，最适合和队友一起奋战！',
  '周末黄金时间，不开黑就浪费了！',

  // 专属感类
  '这个队伍只邀请有缘人，你就是那个对的人！',
  '我们在茫茫人海中选中了你！',
  '能看到这条消息的都是天选之子！',
  '不是每个人都有机会加入我们的！',
  '你的游戏ID很眼熟，一定是高手！'
];

/**
 * 分享标题文案库
 * 用于微信小程序分享时的标题，要求简洁有力
 */
export const SHARE_TITLES = [
  '再也不用忍受坑队友了！快来五排！',
  '告别匹配小学生，我们只要高手！',
  '厌倦单排被坑？来体验真正团队配合！',
  '连胜8局的神仙队伍，快上车！',
  '王者段位带飞，轻松上星耀！',
  '胜率85%战队，还差一个人！',
  '跟大神混，三天上一个大段位！',
  '队伍里有小姐姐，声音超甜！',
  '开黑容易产生感情，要试试吗？',
  '男女搭配干活不累，还能脱单！',
  '最后一个位置！手慢无！',
  '神仙队友组合，一年难遇！',
  '错过会后悔一整个赛季！',
  '刚五杀了，队伍配合太默契！',
  '连胜到手软，就差你一个！',
  '这个阵容无敌，对面想投降！',
  '一个人太孤单，一起开黑吧！',
  '游戏交朋友，快来认识新伙伴！',
  '专业BP策略，保证学到东西！',
  '职业选手退役，技术指导！',
  '队伍太强了，需要你来平衡！',
  '保证让你笑到肚子疼！',
  '现在就开，马上排到人！',
  '黄金时间段，对手都比较菜！',
  '只邀请有缘人，你就是对的人！'
];

/**
 * 分享图片配置
 * 按照文案分类配置对应的分享图片
 */
export const SHARE_IMAGES = {
  // 解决匹配痛点类
  pain: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/033758a81b38a53e5a96a77c45fff8aff7d36fcabd0e0e978b1e44f2deb47e02.png',

  // 上分诱惑类
  rank: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/3d5eb3e769e43d62343dac6de4f9638c3f9809526e929a0403b5d3515cfb407b.png',

  // 找对象暗示类
  social: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/a6d79077f01661f3175a56fd1d5d85ad6e75dfa61ac4dc89cd42a6b3a5f4a0b9.png',

  // FOMO恐惧类
  fomo: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/dc04821f98e75880214783e348090ebabd1869b470401b55052dccba600506d8.png',

  // 炫耀成就类
  achievement: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/465f34c001d56f0863b924a790db280176af4a943c6015b4d700e967bd2992c1.png',

  // 情感共鸣类
  emotion: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/640c0cd0bacdd1bb135aa87b2590366682e2487dce6323e30eed6c2d047c593e.png',

  // 技术流类
  skill: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/a3fda73caa1156b3a2d0edda06df1ca893ed44f608297c87975e24b4fe9abe44.png',

  // 幽默搞笑类
  humor: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/19eb2d27f18ea053966c4eb86594211372f1ce90b92efd047fd5e8886627fbe6.png',

  // 时间紧迫类
  urgent: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/479cab390c0298d9c92a01d9d5fabb340e2873a18fd067798e8139a3941ae8ec.png',

  // 专属感类
  exclusive: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/5c0fd3ee817b35317d427abd36046f8777fb3eba89f350138afbabe64fffa4e0.png',

  // 默认图片
  default: 'https://rbtnet.oss-cn-hangzhou.aliyuncs.com/033758a81b38a53e5a96a77c45fff8aff7d36fcabd0e0e978b1e44f2deb47e02.png'
};

/**
 * 文案分类与分享标题的映射关系
 * 用于确定文案对应的图片分类
 */
export const TITLE_CATEGORY_MAP = {
  // 解决匹配痛点类
  '再也不用忍受坑队友了！快来五排！': 'pain',
  '告别匹配小学生，我们只要高手！': 'pain',
  '厌倦单排被坑？来体验真正团队配合！': 'pain',

  // 上分诱惑类
  '连胜8局的神仙队伍，快上车！': 'rank',
  '王者段位带飞，轻松上星耀！': 'rank',
  '胜率85%战队，还差一个人！': 'rank',
  '跟大神混，三天上一个大段位！': 'rank',

  // 找对象暗示类
  '队伍里有小姐姐，声音超甜！': 'social',
  '开黑容易产生感情，要试试吗？': 'social',
  '男女搭配干活不累，还能脱单！': 'social',

  // FOMO恐惧类
  '最后一个位置！手慢无！': 'fomo',
  '神仙队友组合，一年难遇！': 'fomo',
  '错过会后悔一整个赛季！': 'fomo',

  // 炫耀成就类
  '刚五杀了，队伍配合太默契！': 'achievement',
  '连胜到手软，就差你一个！': 'achievement',
  '这个阵容无敌，对面想投降！': 'achievement',

  // 情感共鸣类
  '一个人太孤单，一起开黑吧！': 'emotion',
  '游戏交朋友，快来认识新伙伴！': 'emotion',

  // 技术流类
  '专业BP策略，保证学到东西！': 'skill',
  '职业选手退役，技术指导！': 'skill',

  // 幽默搞笑类
  '队伍太强了，需要你来平衡！': 'humor',
  '保证让你笑到肚子疼！': 'humor',

  // 时间紧迫类
  '现在就开，马上排到人！': 'urgent',
  '黄金时间段，对手都比较菜！': 'urgent',

  // 专属感类
  '只邀请有缘人，你就是对的人！': 'exclusive'
};

// ========== 分享文案相关工具函数 ==========

/**
 * 获取随机邀请弹窗文案
 * @param {Number} memberCount - 队伍当前人数（可选，用于后续扩展）
 * @returns {String} 随机邀请文案
 */
export function getRandomInviteMessage(memberCount = 0) {
  const randomIndex = Math.floor(Math.random() * INVITE_MESSAGES.length);
  return INVITE_MESSAGES[randomIndex];
}

/**
 * 获取随机分享标题
 * @returns {String} 随机分享标题
 */
export function getRandomShareTitle() {
  const randomIndex = Math.floor(Math.random() * SHARE_TITLES.length);
  return SHARE_TITLES[randomIndex];
}

/**
 * 根据分享标题获取对应的分享图片
 * @param {String} title - 分享标题
 * @returns {String} 对应的图片URL
 */
export function getShareImageByTitle(title) {
  const category = TITLE_CATEGORY_MAP[title];
  return SHARE_IMAGES[category] || SHARE_IMAGES.default;
}

/**
 * 根据文案分类获取分享图片
 * @param {String} category - 文案分类
 * @returns {String} 对应的图片URL
 */
export function getShareImageByCategory(category) {
  return SHARE_IMAGES[category] || SHARE_IMAGES.default;
}

/**
 * 获取随机分享标题和对应图片
 * @returns {Object} 包含标题和图片的对象 {title, imageUrl}
 */
export function getRandomShareTitleWithImage() {
  const title = getRandomShareTitle();
  const imageUrl = getShareImageByTitle(title);

  return {
    title,
    imageUrl
  };
}

/**
 * 根据分类获取邀请文案
 * @param {String} category - 文案分类
 * @returns {Array} 对应分类的文案数组
 */
export function getInviteMessagesByCategory(category) {
  const categoryMap = {
    'pain': INVITE_MESSAGES.slice(0, 5),      // 解决匹配痛点类
    'rank': INVITE_MESSAGES.slice(5, 10),     // 上分诱惑类
    'social': INVITE_MESSAGES.slice(10, 15),  // 找对象暗示类
    'fomo': INVITE_MESSAGES.slice(15, 20),    // FOMO恐惧类
    'achievement': INVITE_MESSAGES.slice(20, 25), // 炫耀成就类
    'emotion': INVITE_MESSAGES.slice(25, 30),     // 情感共鸣类
    'skill': INVITE_MESSAGES.slice(30, 35),       // 技术流类
    'humor': INVITE_MESSAGES.slice(35, 40),       // 幽默搞笑类
    'urgent': INVITE_MESSAGES.slice(40, 45),      // 时间紧迫类
    'exclusive': INVITE_MESSAGES.slice(45, 50)    // 专属感类
  };

  return categoryMap[category] || INVITE_MESSAGES;
}

/**
 * 根据队伍情况智能选择文案分类
 * @param {Object} teamInfo - 队伍信息
 * @returns {String} 推荐的文案分类
 */
export function getRecommendedMessageCategory(teamInfo = {}) {
  const { currentMembers = 1, teamType = 'rank', timeOfDay = 'day' } = teamInfo;

  // 根据队伍人数
  if (currentMembers === 1) {
    return 'emotion'; // 情感共鸣类，强调孤独感
  } else if (currentMembers >= 4) {
    return 'fomo'; // FOMO类，制造紧迫感
  }

  // 根据队伍类型
  if (teamType === 'social') {
    return 'social'; // 找对象类
  } else if (teamType === 'rank') {
    return 'rank'; // 上分类
  }

  // 根据时间段
  if (timeOfDay === 'night') {
    return 'urgent'; // 时间紧迫类
  }

  // 默认返回痛点类
  return 'pain';
}
